const arr = [1,23,2,4,5,6,7,3,43,1,1,1,2]


// 方法1 map+遍历
function fn1 (arr) {
  let map = {};
  let ans = [];
  for (let i = 0; i < arr.length; i++) {
    if (map[arr[i]]) {
      continue;
    } else {
      ans.push(arr[i]);
      map[arr[i]] = true;
    }
  }
  return ans;
}
// 方法二 --- 排序+双指针
function fn2 (arr) {
  arr.sort((a, b) => a - b);
  for (let i = 0; i < arr.length; i++) {
    let j = 0;
    while (j < arr.length && arr[i] === arr[j]) {
      j++;
    }
    if (j !== arr.length) {
      arr.splice(i + 1, j - i);
    }
  }
  return arr
}

// 方法3 filter+indexOf
function fn3 (arr) {
  let ans = arr.filter((val, index) => {
    // arr.indexOf(val) !== index
    return arr.indexOf(val) === index
  })

  return ans;

}

// 方法四：set去重
function fn4 (arr) {
  let ans = new Set([...arr])
  return [...ans]
}

// 方法5：reduce实现
function fn5 (arr) {
  let ans = arr.reduce((acc, val) => {
    if (!acc.includes(val)) {
      acc.push(val);
    }
    return acc;
  }, [])
  return ans;
}

console.log(fn1(arr))
console.log(fn2(arr))
console.log(fn3(arr))
console.log(fn4(arr))
console.log(fn5(arr))
